select count(*)のアスタリスクの由来はなんだろう?
from select count(*)とselect count(列名)の挙動の違い
挙動の違いはわかったが、アスタリスクの由来はなんなんだろう?
select count(1)も同じだよね?
why count(*) asteriskとかで検索してみたがうまく調べたい情報に辿り着かない
ちなみに、COUNT(*)という表記は慣習的なものであり、実はアスタリスクを指定する意味はあまりない。COUNT(1)を指定しても同じ結果が得られるのである。
漢(オトコ)のコンピュータ道: InnoDBでCOUNT()を扱う際の注意事項あれこれ。
SQL の COUNT(*) と COUNT(1) の結果は同じ - ぱと隊長日誌
なんか理由はなさそう?
実際の実行プランを含める(Ctrl + M)
code:1.diff
-<StmtSimple ... StatementText="select count(*) from sys.all_columns" ...
+<StmtSimple ... StatementText="select count(1) from sys.all_columns" ...
-<QueryPlan ... CompileTime="6" CompileCPU="6" ...
+<QueryPlan ... CompileTime="5" CompileCPU="5" ...
-<OptimizerHardwareDependentProperties ... MaxCompileMemory="1984416" />
+<OptimizerHardwareDependentProperties ... MaxCompileMemory="1984320" />
-<RunTimeCountersPerThread ... ActualElapsedms="3" ActualCPUms="3" />
+<RunTimeCountersPerThread ... ActualElapsedms="2" ActualCPUms="2" />
-<RunTimeCountersPerThread ... ActualElapsedms="3" ActualCPUms="3" />
+<RunTimeCountersPerThread ... ActualElapsedms="2" ActualCPUms="2" />
-<RunTimeCountersPerThread ... ActualElapsedms="2" ActualCPUms="2" ...
+<RunTimeCountersPerThread ... ActualElapsedms="1" ActualCPUms="1" ...
参考
/gosyujin-books/0099: SQL 第2版 ゼロからはじめるデータベース操作.pdf
COUNT関数のみcount(*)とすることでNULLを含めた全行を数える
/gosyujin-books/0537: プログラマのためのSQL 第4版 すべてを知り尽くしたいあなたに.pdf#621e6d012c53d80000bad387
29.1 COUNT関数
テーブルの行数、カーディナリティ
count(*)は標準SQLの中で唯一入力にアスタリスクをとる関数
count(*)は空のテーブルに対して0を返す
他のすべての集約関数は空のテーブルに対して空集合を返す
無からは無しか生じない